home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Chipmunk Basic 3.2.8 / chipmunk-basic quick-ref < prev    next >
Text File  |  1995-12-12  |  11KB  |  264 lines

  1. /*
  2.  * chipmunk-basic-3.2.8.sit.hqx
  3.  * Quick Reference and FAQ
  4.  
  5.  * Chipmunk Basic is (c) Copyright 1990,1994 Ronald H. Nicholson, Jr.
  6.  * ALL RIGHTS RESERVED
  7.  *
  8.  * This program is distributed in the hope that it will be useful, but
  9.  * WITHOUT ANY WARRANTY OF ANY KIND; not even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  
  12. ---
  13. Quick Reference for Chipmunk Basic v3.2 - PPC Macintosh version 95Nov
  14. ported by Ronald H. Nicholson, Jr.    rhn@netcom.com
  15.  
  16. - The interpreter includes an dumb old fashioned line number based editor.
  17.     (enter a line, delete a line, edit one line at a time).
  18. - Line numbers are required.
  19. - The variable types are long floats, short integers and strings with a
  20.     maximum length of 254 characters.  Variable names can be up to 31
  21.     characters long and are case insensitive.
  22. - Math is done using the built-in double precision IEEE math. Trigonometric
  23.     functions are all in radians.
  24.     
  25. Operators, functions and statements include:
  26.  
  27.     + - * / ^ mod  and or xor not  > < >= <= <> =
  28.     sqr() log() exp() sin() cos() tan() atn()  pi
  29.     abs() sgn() int() rnd() peek() val() asc() len()
  30.     mid$() right$() left$() str$() chr$()
  31.     goto  if then else endif  gosub return  select case
  32.     for to step next  while wend
  33.     rem  let  dim data read restore   field$()
  34.     input print open for output append as close# load save
  35.     inkey$  input$ eof()  files  fgetbyte# fseek# fputbyte
  36.     run stop end exit quit cont  renum  new clear  def fn
  37.     date$ time$ timer  push() pop  sound morse say  sub
  38.     cls gotoxy moveto lineto  graphics window scrn mouse()
  39.     home get htab vtab pos()  varptr peek() poke fre
  40.     type string integer single double
  41.     
  42. ---
  43. Some Simple Examples:
  44.  
  45.   for i=1 to 10 : print i : next i
  46.  
  47.   c$ = a$ + b$            : rem string concatenation
  48.   a$ = inkey$            : rem inkey$ is non-blocking 
  49.   
  50.   load "sieve.bas"        : rem load TEXT file as a Basic program
  51.                   : rem file names should have .bas extension
  52.   
  53.   open "filename" for output as #1 : print #1, "hello world" : close #1 
  54.   
  55.   gotoxy 5,10 : print "here"    : rem text window (0,0 origin)
  56.   x = pos(0)            : rem text cursor horizontal location
  57.   y = pos(-1)            : rem vertical text cursor location
  58.   
  59.   graphics 0  : moveto 10,10 : lineto 110,80    : rem draw graphics line
  60.   
  61. ---
  62. Frequently Asked Questions:
  63.  
  64. Q: Is more documentation on learning how to program in the BASIC language?
  65. A: The language is mostly compatible with books on programming in the BASIC
  66.    language that were published between 1978 and 1988.  Since these are
  67.    mostly out of print, your best bet is to try your local public library.
  68.  
  69. Q: Is there any way to redirect print statements to the printer?
  70. A: No, there is no way to make this work with current MacOS printer drivers.
  71.    I recommend printing to a file, and then using SimpleText to print.
  72.  
  73. Q: Why can't I load a text file using the "Open" menu?
  74. A: Chipmunk Basic requires that Basic program file names end with a ".bas"
  75.    suffix. However, if you hold down the option key, it will try to open any
  76.    TEXT file.
  77.  
  78. Q: How do I talk to the serial ports using Chipmunk Basic?
  79. A: Chipmunk Basic requires that the Communications ToolBox "Serial Tool"
  80.    be installed in the Extensions folder in the System Folder.  First
  81.    open "COM1:" for input, followed by opening "COM1:" for output.
  82.    The errorstatus$ string variable will return a string you can use
  83.    instead of "COM1:" when you don't want the CTB setup dialog box.
  84.    Try the following snippet:
  85.    
  86.     100 rem   ***  Using the CTB serial ports  ***
  87.     110 on error goto 190
  88.     120 open "COM1:" for input as #3 : alt_setup$ = "COM1: " + errorstatus$
  89.     130 open "COM1:" for output as #4
  90.     150 while not mouse(0)
  91.     160   if not eof(3) then i = fgetbyte(3) : print chr$(i);
  92.     170   c$ = inkey$ : if len(c$) > 0 then print #4,c$;
  93.     180 wend
  94.     190 print " closing serial ports" : close #4 : close #5
  95.  
  96.    Closing and re-opening the port will toggle the handshake line.
  97.    THe command 'CALL "sendbreak", n' will send a break for n ticks.
  98.  
  99. Q: How do I make my own sprites?
  100. A: I use ResEdit (available from ftp.apple.com).  Just paste the new sprite
  101.    'ICN#' and 'cicn's into the resource fork of your Basic program.  Resource
  102.    ID's 128-160 are reserved for the Chipmunk Basic interpreter, so please use
  103.    a high resource ID number.  A 'cicn' resource must have a corresponding
  104.    'ICN#' resource in order for Chipmunk Basic to display it.
  105.    
  106. Q: Why can't I make my graphics window bigger?
  107.    If you have enough memory in your Mac, try increasing the Preferred Memory
  108.    requirements of Chipmunk Basic using the Finder Get Info dialog.  Also try
  109.    decreasing the number of colors in the Monitors Control Panel.
  110.  
  111. Q: Why won't this Microsoft QuickBasic program run? ...
  112. A: Chipmunk Basic was never intended to be exactly compatible with any other
  113.    commercial BAISC language product.  It does include most of the features of
  114.    ANSI BASIC language definition.  Many BASIC programs that are saved as
  115.    ASCII text files and that don't use features of specific computer systems
  116.    can be easily ported to Chipmunk Basic.
  117.    
  118. Q: Can you send me a list of different peeks and pokes?
  119. A: Peeks and pokes don't have much use on current Mac Systems.  If you want to
  120.    live dangerously, you might want to get a copy of SysEqu.h or LoMem.h from
  121.    an old C or 68K assembly language programming package; but don't expect
  122.    anything you do to be compatible with newer MacOS System software.
  123.  
  124. Q: Is there a compiler for Chipmunk Basic?
  125. A: No, however there are several commercial Basic compilers on the market and
  126.    rumors of major new support for the BASIC language on the Mac coming next
  127.    year (1996 maybe ?,  Kenobi ??, Denali ??? ... ).
  128.  
  129. Q: What is the history of Chipmunk Basic?
  130. A: In March 1990, p2c, a pascal to c translator was posted to comp.source.misc
  131.    by David Gillespie.  One of the test input files was "basic.p".  I used the
  132.    c output file to learn about language interpreters and then ported the
  133.    resulting Basic interpreter to my Mac 512KE and then to a PowerMac 7100.
  134.  
  135. ---
  136. Some experimental Chipmunk Basic graphics commands:
  137. * note: The graphics commands in version 3.x are beta test and may be buggy. *
  138.     
  139.     GRAPHICS 0                // show graphics window
  140.     graphics -1                // hide graphics window
  141.     graphics WINDOW x, y, width, height    // graphics window setup
  142.  
  143.     graphics MOVETO  x,y            // Move pen To x,y
  144.     graphics LINETO  x,y            // draw Line To x,y
  145.     graphics OVAL  x,y            // oval  x wide by y high
  146.     graphics DRAWTEXT  a$            // DrawText
  147.                         // use MOVETO to position
  148.     
  149.     graphics RECT  x1,y1, x2,y2        // FrameRect
  150.     graphics FILLRECT  x1,y1, x2,y2,pat#    // PaintRect
  151.     graphics FILLRECT  x1,y1, x2,y2,-1    // EraseRect
  152.     graphics OVAL  x1,y1, x2,y2        // FrameOval
  153.     graphics FILLOVAL  x1,y1, x2,y2,pat#    // PaintOval
  154.     graphics PENSETUP  xsize, ysize, [ mode, pat# ]
  155.     graphics COLOR  i            // set RGBForeColor by index
  156.     graphics COLOR  r,g,b            // red green blue 0-100
  157.  
  158.     graphics PICT  x,y,n            // draw 'pict' resource n
  159.     graphics TEXTSETUP f, s, m    // set up text font, size, mode
  160.  
  161.     graphics (-38)            // get graphics window max width
  162.     graphics (-39)            // get graphics window max height
  163.  
  164.     SPRITE    n  x, y, id        // sprite n @ x,y using ICN# or cicn id
  165.                     // n from 1 to 15, 1 in frontmost plane
  166.                     // ICN# 128 - 141 included with app
  167.                     // a cicn requires ICN# with same id.
  168.     sprite    n  UP    x        // sprite #n move up x pixels
  169.     sprite  n  DOWN  x        //   also returns new sprite y coord
  170.     sprite  n  LEFT  x        // move LEFT (not turn as in Logo!)
  171.     sprite  n  RIGHT   x
  172.     sprite    n  TURN    d        // turn CCW d degrees
  173.     sprite    n  FORWARD x        // move forward x pixels
  174.     sprite    n  PENUP
  175.     sprite    n  PENDOWN
  176.     sprite    n  COLLISION        // returns 1st sprite# in contact
  177.     sprite  n  TO  x,y        // paste a fixed sprite image at (x,y)
  178.     
  179. ---
  180. Other unusual and/or experimental or beta test features:
  181.  
  182.       morse "CQ DE N6YWU",16,40,13,700    // play morse code
  183.       // MORSE string, dot_wpm, volume, letter_wpm, freq
  184.   
  185.     open "SFGetFile" for input as #2    // "SFPutFile" works for output
  186.     open "COM1:" for input as #3        //  *requires* CTB Serial Tool
  187.     open f$ for data input as #4    // data file, no cr-lf translation
  188.     open f$ for data input        // use file for resources, picts, etc.
  189.     say "hello world"        //  *requires* the Speech Manager & Lib
  190.     say "faster", 196, 44, 1     //  string, rate, pitch, voice #
  191.     a$ = field$("aa bb cc", 2," ")   // returns "bb", (awk fields)
  192.     sound 440,0.5,30         // freq, secs_duration, vol 0-100
  193.     sound 0,8192             // play snd resource 8192
  194.     sound -1,a(0),11100        // play 1 sec. of samples from array a
  195.     sound -2,midi_voice,midi_key,velocity,secs_dur    // quicktime note
  196.     sound n,freq(0),dur,vol(0)  // play n voices from arrays freq & vol
  197.     call "record", a(0), n        // records n samples of sound into a
  198.     graphics WINDOW -1,-1, x,y, 2    // scroll graphics background
  199.     graphics BUTTON title$,x,y,w,h,key_code    // draw a standard button
  200.             // at location x,y size w,h
  201.             // the button will input chr$(key_code) when hit
  202.     graphics BUTTON title$,x,y,w,h,varptr(a$)
  203.             // the button will execute a$ when pushed
  204.     graphics BUTTON "",x,y,w,h,varptr(a$)    // transparent button
  205.     graphics BUTTON "",x,y,id,key_code,-4    // cicn or ICN# id button
  206.     graphics BUTTON "",-1            // remove all buttons
  207.     graphics EDIT a$ [,w,h]        // edit a$ in a text edit box
  208.     call "sendbreak", t // breaks for t ticks on the open serial port
  209.     call "hideMenuBar"        // graphics -1 restores it
  210.     call "beep", i // calls BCMD resource "beep" with 1 long* param
  211.     call "doscript", appname$, doscript$    // send a DoScript AE
  212.     call "applescript", script$    // compiles and executes a script.
  213.                 // script$ can also be a string array.
  214.  
  215. A couple oddball commands included in version 3.2.x just for testing:
  216.                 
  217.     call "fft_polar", real(0), amp(0), phase(0) , size // size must 2^n
  218.     call "fft_inv",   amp(0), phase(0), real(0) , size // inverse fft
  219.  
  220.     call "math$", "mul$", r$, "1234567890", "9876543210"
  221.         // 250 digit string math (add$, sub$, mul$, div$, mod$)
  222.                 
  223.  
  224. - "Preferred Size" from Finder Get Info may limit maximum graphics window size
  225. - ICN#, cicn, PICT & BCMD resources may be stored the resource fork of a file:
  226.     open "foo.rsrc" for data input : rem with no "as" token,
  227.         // makes the file foo.rsrc the current resource file
  228. - bigfont options are stored in the Prefs file (edit w/ BBEdit or equiv.)
  229. - AppleScript scriptable. Try this script from a script editor:
  230.       tell application "chipbasic" to DoScript "print 3+4"
  231.       tell application "chipbasic" to DoScript "exec( \" 5 * 7 \" )"
  232.       
  233. ---
  234. Bugs or features:
  235.  
  236. - All input works like the LINE INPUT statement of other Basic versions.
  237. - Line numbers above 999999999 will not list.
  238. - Other reserved words (don't use!) : break width swap do memstat
  239.     draw pset bload bsave class method private public local
  240. - Programs without line numbers can be loaded.  However line numbers will
  241.     be added.  The target of a GOTO can be a label followed by a colon.
  242.  
  243. ---
  244. A  sample program:
  245.  
  246. --- cut here ---
  247. 1 rem "sieve.bas" , a prime number sieve benchmark
  248. 2 t = timer
  249. 3 dim f(8194)
  250. 4 for i = 0 to 8191 : f(i) = 1 : next i
  251. 5 s = 8191
  252. 6 for i = 0 to s
  253. 7   if f(i) = 0 then goto 11
  254. 8   p = i+i+3
  255. 9   for k = i+p to s step p : f(k) = 0 : next k
  256. 10   c = c+1
  257. 11 next i
  258. 12 print c;" primes found in ";
  259. 13 t = timer-t
  260. 14 print t;" seconds"
  261. 15 end
  262. --- cut here ---
  263. */
  264.